<?
/**
 * Classe utilit�ria para manipula��o de pagina��es
 * @package lib
 * @author Jose Berardo
 * @version 1.0
 */

/**
 * Classe utilit�ria para manipula��o de pagina��es
 * 
 * @package lib
 */
class Paginacao {
  /**
   * Par�metros que ser�o enviados � PEAR::Pager 
   *
   * @var array
   */
  private $parametros;
  
  /**
   * links gerados pela pagina��o
   *
   * @var string
   */
  private $links;

  /**
   * Construtor da classe utilitaria de pagina��o
   *
   * @param int $total Total de registro a serem paginados
   * @param int $perPage n�mero de registros por p�gina
   * @param int $delta Tamanho da janela de links de pagina��o
   */
  public function __construct($total = 0, $perPage = 24, $delta = 5) {
    $this->parametros = array(
      'totalItems'				=> $total,
      'perPage'					=> $perPage,
      'delta'					=> $delta,
      'expanded'				=> true,
      'mode'  					=> 'Sliding',
      'linkClass'				=> 'paginaLink',
      'urlVar'					=> 'pagina',
      'append'					=> true,
      'altFirst'				=> 'Primeira p�gina',
      'altLast'					=> '�ltima p�gina',
      'altPage'					=> 'P�gina',
      'altPrev'					=> 'P�gina anterior',
      'altNext'					=> 'Pr�xima p�gina',
      'prevImg'					=> '&laquo;',
      'nextImg'					=> '&raquo;',
      'separator'				=> '|',
      'spacesBeforeSeparator'	=> 1,
      'spacesAfterSeparator'	=> 1,
      'curPageLinkClassName'	=> 'paginaAtual',
      'clearIfVoid' 			=> true,
      'useSessions' 			=> false,
      'closeSession' 			=> false
    );
  }

  /**
   * Recupera��o dos links
   *
   * @return string
   */
  public function getLinks() {
    if (empty($this->links)) {
      // Mudando o error_reporting para desligar o E_STRICT
	  $erro_anterior = error_reporting(E_ALL);
      require_once 'Pager/Pager.php';
      require_once 'Pager/Sliding.php';
	  
      $pager = Pager::factory($this->parametros);
      $this->links = $pager->getLinks();
      // Voltando ao error_reporting anterior � chamada a esse construtor
      error_reporting($erro_anterior);
    }
    return $this->links;
  }
  
  /**
   * Recupera��o dos par�metros
   *
   * @return array
   */
  public function getParametros() {
    return $this->parametros;
  }
  
  /**
   * Defini��o dos par�metros
   *
   * @param array $parametros
   */
  public function setParametros($parametros) {
    $this->parametros = $parametros;
    unset($this->links);
  }
  
  /**
   * M�todo para mudar um par�mtro especificamente
   *
   * @param string $parametro Nome do par�metro a ser alterado
   * @param string $valor Valor a ser assumido pelo par�metro
   */
  public function modificaParametro($parametro, $valor) {
    $this->parametros[$parametro] = $valor;
    unset($this->links);
  }
}
?>